package com.zsrt.devbase.common.utils;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.springframework.web.multipart.MultipartFile;

public class FileUploadUtil {
	/**
	 * 图片上传至本地
	 * @author lzj
	 * @param uploadImgPath 配置文件properties里的路径
	 * @param moduleNames 模块名字
	 * @param file  MultipartFile 
	 * @param request
	 * @return 返回数据库保存图片路径
	 * 2017年2月24日
	 *
	 */
	public  static String imageUpload(String uploadImgPath,String moduleNames,MultipartFile file) {
		try {
			File saveFile = new File(uploadImgPath+"\\"+moduleNames);
			// 如果目录不存在
			if (!saveFile.exists()) {
				// 创建目录
				saveFile.mkdir();
			}
			// 文件原名称
			String fileName = file.getOriginalFilename();
			System.out.println("上传的文件原名称:" + fileName);
			// 判断文件类型
			String type = fileName.indexOf(".") != -1
					? fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()) : null;
			System.out.println("上传的文件类型:" + type);
			if (type != null) {// 判断文件类型是否为空
				if ("GIF".equals(type.toUpperCase()) || "PNG".equals(type.toUpperCase())
						|| "JPG".equals(type.toUpperCase())) {
					// 自定义的文件名称
					String trueFileName = String.valueOf(System.currentTimeMillis()) + fileName;
					// 设置存放图片文件的路径
					String path = uploadImgPath+ "\\" +moduleNames+"\\"+ trueFileName;
					//数据库文件保存路径
					String pictureUrl=moduleNames+"\\"+trueFileName;
					// 转存文件到指定的路径
					file.transferTo(new File(path));
					//返回项目模块名和图片名
					return pictureUrl;
				}
			}
		} catch (IllegalStateException | IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 图片上传至本地
	 * @author leixin
	 * @param uploadImgPath 配置文件properties里的路径
	 * @param moduleNames 模块名字
	 * @param file  MultipartFile 
	 * @param request
	 * @return 返回数据库保存图片路径
	 * 2017年2月24日
	 *
	 */
	public  static String imageUpload(String uploadImgPath,MultipartFile file) {
		try {
			File saveFile = new File(uploadImgPath);
			// 如果目录不存在
			if (!saveFile.exists()) {
				// 创建目录
				saveFile.mkdirs();
			}
			// 文件原名称
			String fileName = file.getOriginalFilename();
			// 判断文件类型
			String type = fileName.indexOf(".") != -1
					? fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()) : null;
			System.out.println("上传的文件类型:" + type);
			if (type != null) {// 判断文件类型是否为空
				if ("GIF".equals(type.toUpperCase()) || "PNG".equals(type.toUpperCase())
						|| "JPG".equals(type.toUpperCase())) {
					// 自定义的文件名称:  4位随机大写字母  + 时间字符串
					String trueFileName = StringUtil.randomAlphabet(4) + String.valueOf(System.currentTimeMillis()) +"." +type;
					// 设置存放图片文件的路径
					String path = uploadImgPath+ "/" + trueFileName;
					
					//获取数据库需要存储的url
					String[] pathArr = path.split("/");
					String pictureUrl = null;
					if (pathArr.length > 2 ) {
						pictureUrl = pathArr[pathArr.length-2]+"/"+pathArr[pathArr.length-1];
					}else {
						throw new RuntimeException("路径错误");
					}
					//数据库文件保存路径
//					String pictureUrl=moduleNames+"\\"+trueFileName;
					// 转存文件到指定的路径
					file.transferTo(new File(path));
					//返回项目模块名和图片名
					return pictureUrl;
				}
			}
		} catch (IllegalStateException | IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * @Description: 图片上传
	 * @MethodName: imageUploadFnction
	 * @param uploadImgPath
	 * @param moduleNames
	 * @param file
	 * @param request
	 * @return Map<String,Object> 返回类型
	 */
	public static Map<String, Object> imageUploadFnction(String uploadImgPath,String moduleNames,MultipartFile file) {
		Map<String, Object> map = new HashMap<String, Object>();
		File saveFile = new File(uploadImgPath+File.separator+moduleNames);
		//1.先判断文件目录是否存在
		if (!saveFile.exists()) {
			//1.1 如果文件目录不存在则  创建目录
			saveFile.mkdir();
		}
		//2.根据获取的文件原名称 截取文件类型的后缀
		String fileName = file.getOriginalFilename();
		if("".equals(fileName)||null==fileName){
			map.put("flag",false);
			map.put(ConstantDefine.CHECK_ERROR,"文件为空");
			return map;
		}
		String type = fileName.indexOf(".") != -1? fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()) : null;
		//3.根据截取的文件后缀类型  判断文件类型是否为空
		if (type == null) {
			map.put("flag",false);
			map.put(ConstantDefine.CHECK_ERROR,"没有图片类型");
			return map;
		}
		//4.判断文件类型是否为指定类型
		if ("GIF".equals(type.toUpperCase()) || "PNG".equals(type.toUpperCase()) || "JPG".equals(type.toUpperCase())) {
			System.out.println("上传的文件原名称:" + fileName);
			//判断是否有中卫字符 如果有中文字符的话 就将中文字符转换为 拼音
			// 4.1自定义的文件名称
			String trueFileName = String.valueOf(System.currentTimeMillis()) + fileName;
			// 4.2设置存放图片文件的路径
			String path = uploadImgPath+ "//" +moduleNames+"//"+ trueFileName;
			// 4.3数据库文件保存路径
			String pictureUrl=moduleNames+"/"+trueFileName;
			// 4.4转存文件到指定的路径
			try {
				file.transferTo(new File(path));
				map.put("flag",true);
				map.put(ConstantDefine.SUCCESS_MSG,"上传成功");
				map.put("result",pictureUrl);
			} catch (IllegalStateException | IOException e) {
				map.put("flag",false);
				map.put(ConstantDefine.SYS_ERR_MSG,"图片上传失败");
				return map;
			}
			//返回项目模块名和图片名
		}else{
			map.put("flag",false);
			map.put(ConstantDefine.CHECK_ERROR,"图片类型不符");
		}
		return map;
	}
}
